package org.posupe.util;

public class Endereco {
	private String cep;

	private String logradouro; // @jve:decl-index=0:

	private Integer numero; // @jve:decl-index=0:

	private String complemento; // @jve:decl-index=0:

	private String bairro; // @jve:decl-index=0:

	private String cidade; // @jve:decl-index=0:

	private String estado; // @jve:decl-index=0:

	private String pais;

	public Endereco(String cep, String logradouro, Integer numero,
			String complemento, String bairro, String cidade, String estado,
			String pais) {
		this.cep = cep;
		this.logradouro = logradouro;
		this.numero = numero;
		this.complemento = complemento;
		this.bairro = bairro;
		this.cidade = cidade;
		this.estado = estado;
		this.pais = pais;
	}

	public String getBairro() {
		return bairro;
	}

	public void setBairro(String bairro) {
		this.bairro = bairro;
	}

	public String getCep() {
		return cep;
	}

	public void setCep(String cep) {
		this.cep = cep;
	}

	public String getCidade() {
		return cidade;
	}

	public void setCidade(String cidade) {
		this.cidade = cidade;
	}

	public String getComplemento() {
		return complemento;
	}

	public void setComplemento(String complemento) {
		this.complemento = complemento;
	}

	public String getEstado() {
		return estado;
	}

	public void setEstado(String estado) {
		this.estado = estado;
	}

	public String getLogradouro() {
		return logradouro;
	}

	public void setLogradouro(String logradouro) {
		this.logradouro = logradouro;
	}

	public Integer getNumero() {
		return numero;
	}

	public void setNumero(Integer numero) {
		this.numero = numero;
	}

	public String getPais() {
		return pais;
	}

	public void setPais(String pais) {
		this.pais = pais;
	}

	public String toString() {
		return (this.logradouro == null ? "" : (this.logradouro + ", "))
				+ (this.numero == null || this.numero.intValue() == 0 ? ""
						: (this.numero + ", "))
				+ (this.complemento == null ? "" : (this.complemento + " "))
				+ (this.bairro == null ? "" : (this.bairro + ", "))
				+ (this.cidade == null ? "" : (this.cidade + ", "))
				+ (this.estado == null ? "" : this.estado);
	}

	public boolean match(Endereco endereco) {
		boolean retorno = true;

		if (endereco != null
				&& (endereco.getCep() != null
						|| endereco.getLogradouro() != null
						|| endereco.getNumero() != null
						|| endereco.getComplemento() != null
						|| endereco.getBairro() != null
						|| endereco.getCidade() != null
						|| endereco.getEstado() != null || endereco.getPais() != null)
				&& (this.getCep() != null || this.getLogradouro() != null
						|| this.getNumero() != null
						|| this.getComplemento() != null
						|| this.getBairro() != null || this.getCidade() != null
						|| this.getEstado() != null || this.getPais() != null)) {

			if (endereco.getCep() != null && this.getCep() != null && retorno) {
				if (!endereco.getCep().equals(this.getCep())) {
					retorno = false;
				}
			}
			if (endereco.getLogradouro() != null
					&& this.getLogradouro() != null && retorno) {
				if (!this.getLogradouro().contains(endereco.getLogradouro())) {
					retorno = false;
				}
			}

			if (endereco.getNumero() != null && this.getNumero() != null
					&& retorno) {
				if (this.getNumero() == null
						|| endereco.getNumero().intValue() != this.getNumero()
								.intValue()) {
					retorno = false;
				}
			}

			if (endereco.getComplemento() != null
					&& this.getComplemento() != null && retorno) {
				if (!this.getComplemento().contains(endereco.getComplemento())) {
					retorno = false;
				}
			}

			if (endereco.getBairro() != null && this.getBairro() != null
					&& retorno) {
				if (!this.getBairro().contains(endereco.getBairro())) {
					retorno = false;
				}
			}
			if (endereco.getCidade() != null && this.getCidade() != null
					&& retorno) {
				if (!this.getCidade().contains(endereco.getCidade())) {
					retorno = false;
				}
			}
			if (endereco.getEstado() != null && this.getEstado() != null
					&& retorno) {
				if (!this.getEstado().contains(endereco.getEstado())) {
					retorno = false;
				}
			}
			if (endereco.getPais() != null && this.getPais() != null && retorno) {
				if (!this.getPais().contains(endereco.getPais())) {
					retorno = false;
				}
			}
		} else {
			retorno = false;
		}

		return retorno;
	}
}
